<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 
        一、变量声明提升
            1、通过var声明的变量，在定义语句之前就可以访问到值: undefined
        二、函数声明提升
            1、通过function声明的函数，在之前就可以直接调用
            2、值：函数定义(对象)
        三、问题：变量提升和函数提升如何产生的？
     -->

     <script>
        var a = 3;
        function Fun () { 
            console.log(a) // undefined
            var a = 4
        }
        /* 
            console.log(a) 
            var a = 4
            以上两行代码相当于: 
            var a
            console.log(a)
            a = 4
         */
        Fun()

        Fun2()  // 函数提升  可以调用
        Fun3()  // 变量提升  不能调用
        function Fun2 () { 
            console.log('Fun2')
        }
        var Fun3 = function () { 
            console.log('Fun3')
        }
     </script>
</body>
</html>